import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';

// 获取当前模块路径
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

// 配置参数
const OUTPUT_FILE = path.join(__dirname, 'src/utils/menuListFiles.js');

const SORT_ORDER_CONFIG = {
  '/files': ['类别比较', '数据关系', '数据分布', '时间序列', '地理空间', '局部整体', '高维数组'],
  '/files/类别比较': [
    '柱形图', '条形图', '折线图', '不等宽柱形图', '词云图', '径向柱图', '克利夫兰点图',
    '雷达图', '南丁格尔玫瑰图', '坡度图', '条形图', '柱形图', '热图', '箱式图', '象限图'
  ],
  '/files/数据关系': [
    '韦恩图', '点图', 'UpSet图'
  ],
  '/files/数据分布': [
    '柱状图', '折线图', '点图', '坡度图-山峦图', '气泡图', '波形图', '热力图', '词云图', '雷达图-花瓣图'
  ],
    '/files/局部整体': [
      '条形图','柱状图','热图','饼图','热图'
  ],
  '/files/*/*': [
    '代码展示', '数据参数', '主要参数', '主要结果'
  ],
  '/files/*/*/*': [
    '代码展示', '数据参数', '主要参数', '主要结果'
  ]
};

// 智能获取排序规则
function getSortOrder(currentPath) {
  const exactMatch = SORT_ORDER_CONFIG[currentPath];
  if (exactMatch) return exactMatch;
  const pathSegments = currentPath.split('/').filter(Boolean);
  if (pathSegments.length >= 3) {
    return SORT_ORDER_CONFIG['/files/*/*'];
  }
  return null;
}

// 按配置排序
function sortFolders(folders, parentPath) {
  const order = getSortOrder(parentPath);
  if (!order) return folders;

  return [...folders].sort((a, b) => {
    // 特殊处理"其他"类别，使其始终排在最后
    if (a.name === '其他') return 1;
    if (b.name === '其他') return -1;

    const indexA = order.indexOf(a.name);
    const indexB = order.indexOf(b.name);
    if (indexA !== -1 && indexB !== -1) return indexA - indexB;
    if (indexA !== -1) return -1;
    if (indexB !== -1) return 1;
    return a.name.localeCompare(b.name);
  });
}

// 递归构建目录树（仅统计文件数量）
function buildFolderTree(dirPath, parentPath = '', parentArr = []) {
  const name = path.basename(dirPath);
  const currentPath = parentPath ? `${parentPath}/${name}` : `/${name}`;
  const currentArr = [...parentArr, name]; // 构建当前路径的数组

  const item = {
    name,
    path: currentPath === '/public' ? '/files' : currentPath.replace('/public', ''),
    arr: currentArr, // 添加从根到当前的路径数组
    count: 0, // 仅统计文件数量
    children: []
  };

  try {
    const children = fs.readdirSync(dirPath);

    children.forEach(child => {
      const childPath = path.join(dirPath, child);
      const stats = fs.statSync(childPath);

      if (stats.isDirectory()) {
        const childFolder = buildFolderTree(childPath, currentPath, currentArr);
        item.children.push(childFolder);
        item.count += childFolder.count; // 仅累加子级的文件数量
      } else {
        item.children.push({
          name: child,
          path: path.join(item.path, child),
          arr: [...currentArr], // 文件也继承父级路径数组
          count: 0 // 文件节点的count始终为0
        });
        item.count += 1; // 当前目录的文件数量+1
      }
    });

    item.children = sortFolders(item.children, item.path);
  } catch (err) {
    if (err.code === 'ENOENT') {
      console.warn(`目录不存在: ${dirPath}`);
    } else {
      throw err;
    }
  }

  return item;
}

// 生成输出文件
function generateOutput() {
  const publicFolder = buildFolderTree(path.join(__dirname, 'public'));
  const filesTree = publicFolder.children.find(c => c.name === 'files') || { children: [] };

  const fileContent = `// 自动生成的文件结构 (仅统计文件数量)
// 生成时间: ${new Date().toISOString()}
const folderStructure = ${JSON.stringify([filesTree], null, 2).replace(/"([^"]+)":/g, '$1:')};

export default folderStructure;
`;

  fs.writeFileSync(OUTPUT_FILE, fileContent);
  console.log('✅ 目录结构已生成:', OUTPUT_FILE);
}

// 执行生成
generateOutput();